#ifndef __MOTOR_H
#define __MOTOR_H
#include "main.h"
#include "motor_def.h"
#include "canopen_motor.h"

#define MOTOR_HOME_TIMEOUT			(30*1000)
#define MOTOR_EVT0                  (1<<0)   
#define MOTOR_EVT1                  (1<<1)   
#define MOTOR_EVT2                  (1<<2)   
#define MOTOR_EVT3                  (1<<3)   
#define MOTOR_EVT4                  (1<<4)   
#define MOTOR_EVT5                  (1<<5)   
#define MOTOR_EVT6                  (1<<6)   
#define MOTOR_EVT7                  (1<<7)   

//#define Motor_Get					Canopen_Motor_Get
//#define Motor_Get_Pos				Canopen_Motor_Get_Pos
//#define Motor_Get_Angle				Canopen_Motor_Get_Angle
//#define Motor_Get_Vel				Canopen_Motor_Get_Vel
//#define Motor_Set_Zero				Canopen_Motor_Set_Zero
//#define Motor_Home_Start			Canopen_Motor_Home_Start
//#define Motor_Home_Fast				Canopen_Motor_Home_Fast
//#define Motor_Home_Slow				Canopen_Motor_Home_Slow
//#define Motor_Home_Pause			Canopen_Motor_Home_Pause
//#define Motor_Home_Failed			Canopen_Motor_Home_Failed
//#define Motor_Home_Success			Canopen_Motor_Home_Success
//#define Motor_HomeStatus_Get		Canopen_Motor_HomeStatus_Get



typedef struct
{
	canopen_motor_t* pMotor;
	uint8_t nodeId;
	int target;	
	int curPos;
}abs_move_buf_t;

typedef struct{
    int32_t pulseFast;          // 快速运动时的脉冲数
    uint32_t velFast;           // 快速运动时的速度
    int32_t pulseSlow;          // 慢速运动时的脉冲数
    uint32_t velSlow;           // 慢速运动时的速度
    uint32_t velStop;           // 以此速度停到当前位置
}pp_home_parameter_t;

typedef struct{
    int16_t torque;             // 回零的力矩
    uint32_t maxVel;            // 回零的最大速度
    uint32_t stopTime;          // 停止多长时间可以认为是已经到限位了
}tq_home_parameter_t;

typedef struct
{
    uint8_t nodeId;
    uint8_t returnMode;
    rt_sem_t sem_home_start;
    rt_sem_t sem_home_signal;       // 原点开关信号，TQ限位模式不使用
    rt_sem_t sem_home_success;
    union{
        pp_home_parameter_t pp;
        tq_home_parameter_t tq;
    };
}home_parameter_t;

typedef struct
{
    int32_t llPos;
    int32_t lPos;
    int32_t curPos;
    int32_t vel;
}sline_t;

void Motor_Home_Signal(uint8_t nodeId);
void Motor_Home_Rcv(uint8_t nodeId);

#endif



